package com.shujia

object Demo7CaseClass {
  def main(args: Array[String]): Unit = {


    //创建样例类的对象
    //    val score: Score = new Score("001", "999", 100)

    //样例类可以不适用new创建对象
    val score: Score = Score("001", "999", 100)

    //默认属性的值是不能修改的，可以在属性上面加上var
    score.score = 100

    println(score)

    CaseClass.print()

    //调用apply 方法
    //CaseClass.apply()

    // val stu: CaseClass = CaseClass.apply("张三", 23)
    val stu: CaseClass = CaseClass("张三", 23)

  }

}

/**
  * 样例类  --->对java中自定义类的简写
  * 样例类中可以在写自定义方法
  *
  * 1  scala在编译的过程中会自动加上toString方法
  * 2  自动加上Serializable
  *
  *
  * 样例类的参数即属性
  *
  */
case class Score(stuId: String, couId: String, var score: Int)


class CaseClass(name: String, age: Int) {

  var _name: String = name
  var _age: Int = age


  override def toString: String = s"CaseClass(${_name}, ${_age})"
}


/**
  * 伴生对象
  *
  */
object CaseClass {


  def print(): Unit = {
    println("对象中的方法可以直接使用类名调用,相当于java中方法通过static修饰")
  }

  /**
    * apply  方法可以直接使用对象名调用  CaseClass()
    *
    */
  def apply(name: String, age: Int): CaseClass = {

    //创建类的对象并返回
    new CaseClass(name, age)

    //如果最后一行作为返回值，return可以省略
  }
}





